package ar.com.tallerdos.smartdinner.sync;

import ar.com.tallerdos.smartdinner.activity.ComidasLista;

public class MaestroSincronizador extends Thread {

    private Boolean seguirEjecutandose = true;
    private Boolean cargaInicialCompletada = false;
    private static MaestroSincronizador instancia;
    private ComidasLista comidasActivity;

    public static MaestroSincronizador getInstancia() {
	if (instancia == null) {
	    instancia = new MaestroSincronizador();
	}
	return instancia;
    }

    private MaestroSincronizador() {
	// Privado para implementar el singleton
    }
    
    @Override
    public synchronized void start() {
	this.seguirEjecutandose = true;
        super.start();
    }

    @Override
    public void run() {	
	
	while (seguirEjecutandose && !cargaInicialCompletada) {
	    try {
		Thread.sleep(1000);
	    } catch (InterruptedException e) {
		e.printStackTrace();
		seguirEjecutandose = false;
	    } 
	}
	
	while (seguirEjecutandose) {
	    new GenericAsyncTask(new MesasSincronizador()).execute();
	    new GenericAsyncTask(new RubrosSincronizador()).execute();
	    new GenericAsyncTask(new PedidosSincronizador()).execute();
	    new GenericAsyncTask(new GuarnicionesSincronizador()).execute();
	    
	    try {
		Thread.sleep(20000);
	    } catch (InterruptedException e) {
		e.printStackTrace();
		seguirEjecutandose = false;
	    }
	}
	instancia = null;
    }

    @Override
    public void interrupt() {
        super.interrupt();
	this.seguirEjecutandose = false;
    }
    
    @Override
    protected void finalize() throws Throwable {
	super.finalize();
	this.seguirEjecutandose = false;
    }

    public Boolean getSeguirEjecutandose() {
        return seguirEjecutandose;
    }

    public void parar() {
	this.seguirEjecutandose = false;
    }

    public ComidasLista getComidasActivity() {
        return comidasActivity;
    }

    public void setComidasActivity(ComidasLista comidasActivity) {
        this.comidasActivity = comidasActivity;
    }

    public void setCargaInicialCompleta() {
	this.cargaInicialCompletada = true;
    }
    
    
}
